package com.yida.gwj.expend.outside.service;

import com.yida.gwj.expend.outside.domain.GwjMaintenanceFundsBusinessBuild;
import com.yida.gwj.expend.outside.domain.GwjMaintenanceFundsBusinessHouse;
import com.yida.gwj.expend.outside.domain.dto.*;
import com.yida.gwj.expend.outside.domain.request.*;
import com.yida.gwj.expend.outside.enums.BusinessAttachmentServerTypeEnum;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

import java.util.List;

/**
 * 公维金维修资金业务Service接口
 *
 * @author lgp
 * @date 2023-02-20
 */
@EnableAspectJAutoProxy(exposeProxy = true)
public interface IGwjMaintenanceFundsBusinessAppropriateService {

    /**
     * 查询公维金维修资金业务列表
     *
     * @param maintenanceFundsBusinessListRequest 公维金维修资金业务
     * @return 公维金维修资金业务集合
     */
    List<GwjMaintenanceFundsBusinessListDTO> getGwjMaintenanceFundsBusinessList(GwjMaintenanceFundsBusinessListRequest maintenanceFundsBusinessListRequest);

    /**
     * 获取gwj维修基金业务详细信息
     *
     * @param bizId 业务标识
     * @return {@link GetBusinessDetailDTO}
     */
    GetBusinessDetailDTO getDetailMessage(Long bizId);

    /**
     * 分摊金额-已选择
     *
     * @param allocatedAmountRequest
     * @return AllocatedAmountSelectDTO
     */
    AllocatedAmountSelectDTO allocatedAmountList(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 资金分摊-未选中列表
     *
     * @param allocatedAmountRequest 请求
     * @return 公维金维修资金业务
     */
    List<GwjMaintenanceFundsBusinessHouse> allocatedAmountCancelList(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 按类型平摊金额 -计算标准
     *
     * @param shareEquallyMoneyRequest
     * @return AllocatedAmountSelectDTO
     */
    int shareEquallyMoney(ShareEquallyMoneyRequest shareEquallyMoneyRequest);

    /**
     * 修改平摊金额
     *
     * @param shareEquallyMoneyRequest
     * @return AllocatedAmountSelectDTO
     */
    int shareEquallyMoneyUpdate(ShareEquallyMoneyRequest shareEquallyMoneyRequest);


    /**
     * 获取验收报告
     *
     * @param bizId 业务标识
     * @return {@link AcceptanceReportDTO}
     */
    AcceptanceReportDTO getAcceptanceReport(Long bizId);

    /**
     * 保存拨付申请业务
     *
     * @param saveAppropriateApplyRequest 保存拨付申请业务请求
     * @return int
     */
    int saveAppropriateApply(SaveAppropriateApplyRequest saveAppropriateApplyRequest);

    /**
     * 分摊金额-选中房屋
     *
     * @param allocatedAmountRequest
     * @return AllocatedAmountSelectDTO
     */
    int allocatedAmountArrange(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 分摊金额-取消选中房屋
     *
     * @param allocatedAmountRequest
     * @return AllocatedAmountSelectDTO
     */
    int allocatedAmountCancel(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 获取申请拨付报告
     *
     * @param bizId 业务标识
     * @return {@link ApplyAppropriateReportDTO}
     */
    ApplyAppropriateReportDTO getApplyAppropriateReport(Long bizId);

    /**
     * 预受理提交
     *
     * @param bizId 业务标识
     * @return int
     */
    int preSubmit(Long bizId);

    /**
     * 查询决算费用分摊清册
     *
     * @param bizId                            业务标识
     * @param businessAttachmentServerTypeEnum 业务附件服务器枚举类型
     * @return int
     */
    TotalCostShareListDTO costList(Long bizId, BusinessAttachmentServerTypeEnum businessAttachmentServerTypeEnum);

    /**
     * 获取已选中楼栋信息
     *
     * @param bizId 商业标识
     * @return 获取已选中楼栋信息
     */
    List<GwjMaintenanceFundsBusinessBuild> getSelectBuilds(Long bizId);

    /**
     * 获取楼栋下房屋信息
     *
     * @param housesUnderBuildRequest 房子在构建请求
     * @return 楼栋下房屋信息
     */
    List<GwjMaintenanceFundsBusinessHouse> getHouseList(HousesUnderBuildRequest housesUnderBuildRequest);

    /**
     * 导出房屋数据
     *
     * @param allocatedAmountRequest
     * @return 楼栋下房屋信息
     */
    List<AllocatedAmountListDTO> exportHouseList(AllocatedAmountRequest allocatedAmountRequest);

    /**
     * 获取步骤按钮权限信息
     *
     * @param businessFlagType 业务标志类型
     * @return 查询业务基础信息
     */
    StepConfigInfoDTO getStepConfigInfo();
}
